home *** CD-ROM | disk | FTP | other *** search
- #ifndef _xstrtol_h_
- #define _xstrtol_h_ 1
-
- #if STRING_TO_UNSIGNED
- # define __xstrtol xstrtoul
- # define __strtol strtoul
- # define __unsigned unsigned
- # define __ZLONG_MAX ULONG_MAX
- #else
- # define __xstrtol xstrtol
- # define __strtol strtol
- # define __unsigned /* empty */
- # define __ZLONG_MAX LONG_MAX
- #endif
-
- #undef __P
- #if defined (__STDC__) && __STDC__
- #define __P(x) x
- #else
- #define __P(x) ()
- #endif
-
- enum strtol_error
- {
- LONGINT_OK, LONGINT_INVALID, LONGINT_INVALID_SUFFIX_CHAR, LONGINT_OVERFLOW
- };
- typedef enum strtol_error strtol_error;
-
- strtol_error
- __xstrtol __P ((const char *s, char **ptr, int base,
- __unsigned long int *val, const char *valid_suffixes));
-
- #define _STRTOL_ERROR(exit_code, str, argument_type_string, err) \
- do \
- { \
- switch ((err)) \
- { \
- case LONGINT_OK: \
- abort (); \
- \
- case LONGINT_INVALID: \
- error ((exit_code), 0, "invalid %s `%s'", \
- (argument_type_string), (str)); \
- break; \
- \
- case LONGINT_INVALID_SUFFIX_CHAR: \
- error ((exit_code), 0, "invalid character following %s `%s'", \
- (argument_type_string), (str)); \
- break; \
- \
- case LONGINT_OVERFLOW: \
- /* FIXME: make this message dependent on STRING_TO_UNSIGNED */\
- error ((exit_code), 0, "%s `%s' larger than maximum long int",\
- (argument_type_string), (str)); \
- break; \
- } \
- } \
- while (0)
-
- #define STRTOL_FATAL_ERROR(str, argument_type_string, err) \
- _STRTOL_ERROR (2, str, argument_type_string, err)
-
- #define STRTOL_FAIL_WARN(str, argument_type_string, err) \
- _STRTOL_ERROR (0, str, argument_type_string, err)
-
- #endif /* _xstrtol_h_ */
-